#!/bin/bash

# 获取服务状态
# 参数:
#   $1: 服务名
# 返回值:
#   nocreate    : 容器未创建
#   created     : 容器已创建但未启动
#   running     : 正在运行
#   paused      : 暂停状态
#   restarting  : 正在重启
#   exited      : 已退出
#   dead        : 异常状态
getServiceStatus() {
    local _service=$1
    local _serviceId=$(docker-compose ps -aq "$_service" 2>/dev/null | head -n1)
    if [[ -z "$_serviceId" ]]; then
        echo "nocreate"  # 服务未创建
        return
    fi
    # 获取容器状态
    docker inspect --format="{{.State.Status}}" "$(docker-compose ps -aq "$_service")" 2>/dev/null
}

# 等待容器进入 running 状态
# 参数：
#   $1: 服务名
#   $2: 超时时间（秒）
#   $3: 每次检查间隔（秒）
# 返回值：
#   0: 成功（容器进入 running）
#   1: 超时
waitForContainerRunning() {
    local _serviceName="$1"
    local _timeout="$2"
    local _sleepTime="$3"
    local _startTime=$(date +%s)

    while true; do
        local _status=$(getServiceStatus "$_serviceName")
        if [[ "$_status" == "running" ]]; then
            return 0
        fi

        local _curTime=$(date +%s)
        local _elapsedTime=$((_curTime - _startTime))

        if (( _elapsedTime >= _timeout )); then
            return 1
        fi

        # sleep 支持小数秒
        sleep $_sleepTime
    done
}

# 设置键的值
# 参数:
#   $1: 文件路径
#   $2: 键
#   $3: 值
# 返回值: 无
setKeyValue() {
    local _file=$1
    local _key=$2
    local _value=$3

    local _row=$(grep "^$_key " $_file 2>/dev/null)
    if [[ $_row == "" ]]; then
        echo "$_key $_value" | tee -a $_file
    else
        echo $_row
        if [[ $_row != "$_key $_value" ]]; then
            echo "=>"
            sed -i "s/^$_key .*/$_key $_value/" $_file
            grep "^$_key " $_file
        fi
    fi
}

